/**
 * Projeto Myou - Disciplina: Sistemas de Informação I
 * @author Ronycley Gonçalves Agra
 * @since 23/09/2011
 */
package myou.classes;

import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * Classe que encapsula o comportamento de um Item
 * @author Ronycley Gonçalves Agra
 * @version 1.00
 * @since Milestone 1 23/09/2011 
 * @see myou.classes.Sistema
 * @see myou.classes.Interesse
 * @see myou.classes.Emprestimo
 * @see myou.classes.Mensagem
 * @see myou.classes.RequisicaoDeAmizade
 * @see myou.classes.RequisicaoDeEmprestimo
 * @see myou.classes.Sessao
 * @see myou.classes.Topico
 * @see myou.classes.Usuario
 */
public class Item {
	
	private String id;
	private Usuario usuario;
	private String nome;
	private String descricao;
	private String categoria;
	private String situacao;
	private Calendar dataCriacao;
	
	/**
	 * Construtor
	 * @param usuario O usuário dono do item
	 * @param nome O nome do item
	 * @param descricao A descrição do item
	 * @param categoria A categoria do item
	 */
	public Item(Usuario usuario, String nome, String descricao, String categoria) {
		this.id = this.generateId(nome);
		this.usuario = usuario;
		this.nome = nome;
		this.descricao = descricao;
		this.categoria = categoria;
		this.situacao = "Disponivel";
		this.dataCriacao = new GregorianCalendar();
	}

	/**
	 * Retorna o usuário dono do item
	 * @return O usuário dono do item
	 */
	public Usuario getUsuario() {
		return usuario;
	}

	/**
	 * Modifica o usuário dono do item
	 * @param usuario O novo usuário dono do item
	 */
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * Retorna o id do item
	 * @return O id do item
	 */
	public String getId() {
		return id;
	}

	/**
	 * Retorna o nome do item
	 * @return O nome do item
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * Modifica o nome do item
	 * @param nome O novo nome do item
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * Retorna a descrição do item
	 * @return A descrição do item
	 */
	public String getDescricao() {
		return descricao;
	}

	/**
	 * Modifica a descrição do item
	 * @param descricao A nova descrição do item
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	/**
	 * Retorna a categoria do item
	 * @return A categoria do item
	 */
	public String getCategoria() {
		return categoria;
	}

	/**
	 * Modifica a categoria do item
	 * @param categoria A nova categoria do item
	 */
	public void setCategoria(String categoria) {
		this.categoria = categoria;
	}
	
	/**
	 * Retorna a situação do item
	 * @return A situação do item - Emprestado ou disponível
	 */
	public String getSituacao() {
		return situacao;
	}

	/**
	 * Modifica a situação do item
	 * @param situacao O nova situação do item
	 */
	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	/**
	 * Retorna a data da criação do item
	 * @return A data da criação do item
	 */
	public Calendar getDataCriacao() {
		return dataCriacao;
	}

	/**
	 * @param dataCriacao the dataCriacao to set
	 */
	public void setDataCriacao(Calendar dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	/**
	 * Gera randomicamete o id do item
	 * @return O id do item
	 */
	private String generateId(String nome){
		int parteRandomica = (int)(Math.random()* 100);
		return (new Integer(parteRandomica)).toString()+nome;
	}
}
